#include "cx_hal_general.h"
#include "cx_timer.h"
#include "tmr.h"
#include "delay.h"
#include "usart.h"

extern void system_clock_config(void);

cx_hal_gpio_handle_t check;

void io_control(cx_pointer_t args)
{
  static uint8_t io_status = 0;
  if(io_status == 0)
  {
    // gpio_bits_set(GPIOA,GPIO_PINS_0);
    cx_hal_gpio_write(&check, CX_SET);
    io_status = 1;
  }
  else
  {
    cx_hal_gpio_write(&check, CX_RESET);
    io_status = 0;
  }
}

cx_software_timer_t io_toggle;
int main(void)
{
    gpio_init_type gpio_config;
    cx_debug_variable_t GPIOA_OUT_REG = 
    {
      .name = "GPIOA_ODR",
      .pdata = (uint32_t*)(&(GPIOA->odt)),
      .type = CX_DATATYPE_UINT32
    };
    system_clock_config();
    cx_hal_init();
    io_toggle.gap = 375;
    io_toggle.cb_handler = io_control;
    io_toggle.args = CX_NULL;
    io_toggle.trigger_type = TriggerTypeNormal;
		check.controller = GPIOA;
		check.pin        = 0;
    delay_init(144);
    crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
    gpio_config.gpio_mode = GPIO_MODE_OUTPUT;
    gpio_config.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
    gpio_config.gpio_pins = GPIO_PINS_0;
    gpio_config.gpio_pull = GPIO_PULL_NONE;
    gpio_config.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
    gpio_init(GPIOA, &gpio_config);
		USART2_init();
    cx_debug_addVariable(&GPIOA_OUT_REG);
    TMR_Init();
    cx_sw_timer_regSoftwareTimer(&timer1, &io_toggle);
    while(1)
		{
			
		}
}
